/**
 * Copyright &copy; 2013-2015 山东易科德软件有限模块   All rights reserved.
 */
package cn.net.ecode.modules.sys.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import cn.net.ecode.common.config.Global;
import cn.net.ecode.common.persistence.Page;
import cn.net.ecode.common.utils.StringUtils;
import cn.net.ecode.common.web.BaseController;
import cn.net.ecode.modules.sys.entity.Module;
import cn.net.ecode.modules.sys.service.ModuleService;

/**
 * 模块管理Controller
 * @author ThinkGem
 * @version 2014-8-19
 */
@Controller
@RequestMapping(value = "${adminPath}/sys/module")
public class ModuleController extends BaseController {

	@Autowired
	private ModuleService moduleService;
	
	/**
	 * 获取数据
	 * @param moduleCode
	 * @return
	 */
	@ModelAttribute
	public Module get(String moduleCode, boolean isNewRecord) {
		return moduleService.get(moduleCode, isNewRecord);
	}
	
	/**
	 * 查询列表
	 * @param module
	 * @param request
	 * @param response
	 * @param model
	 * @return
	 */
	@RequiresPermissions("sys:module:view")
	@RequestMapping(value = {"list", ""})
	public String list(Module module, Model model) {
		module.setStatus(StringUtils.EMPTY);
		return "modules/sys/moduleList";
	}
	
	/**
	 * 查询列表
	 * @param module
	 * @param request
	 * @param response
	 * @param model
	 * @return
	 */
	@RequiresPermissions("sys:module:view")
	@ResponseBody
	@RequestMapping(value = "listData")
	public Page<Module> listData(Module module, HttpServletRequest request, HttpServletResponse response, Model model) {
		Page<Module> page = moduleService.findPage(new Page<Module>(request, response), module); 
		return page;
	}

	/**
	 * 查看编辑表单
	 * @param module
	 * @param model
	 * @return
	 */
	@RequiresPermissions("sys:module:view")
	@RequestMapping(value = "form")
	public String form(Module module, Model model) {
		if (StringUtils.isBlank(module.getClassName())){
			module.setClassName(LoginController.class.getName());
		}
		model.addAttribute("module", module);
		return "modules/sys/moduleForm";
	}

	/**
	 * 保存数据
	 * @param module
	 * @return
	 */
	@RequiresPermissions("sys:module:edit")
	@ResponseBody
	@RequestMapping(value = "save")
	public String save(Module module) {
		logger.debug("isNewRecord:{}",module.getIsNewRecord());
		StringBuilder message = new StringBuilder();
		if (!beanValidator(message, module)){
			return renderResult(Global.FALSE, message);
		}
		if (!module.getCurrentUser().isSuperAdmin()){
			return renderResult(Global.FALSE, "越权操作，只有超级管理员才能修改此数据！");
		}
		moduleService.save(module);
		return renderResult(Global.TRUE, "保存模块成功！");
	}

	/**
	 * 禁用数据
	 * @param module
	 * @return
	 */
	@RequiresPermissions("sys:module:edit")
	@ResponseBody
	@RequestMapping(value = "disable")
	public String disable(Module module) {
		if(Global.isDemoMode()){
			return renderResult(Global.FALSE, "演示模式，不允许操作！");
		}
		if (!module.getCurrentUser().isSuperAdmin()){
			return renderResult(Global.FALSE, "越权操作，只有超级管理员才能修改此数据！");
		}
		if ("core".equals(module.getModuleCode())){
			return renderResult(Global.FALSE, "核心模块，不允许禁用！");
		}
		module.setStatus(Module.STATUS_DISABLE);
		moduleService.updateStatus(module);
		return renderResult(Global.TRUE, "停用模块"+module.getModuleName()+"成功");
	}

	/**
	 * 启用数据
	 * @param module
	 * @return
	 */
	@RequiresPermissions("sys:module:edit")
	@ResponseBody
	@RequestMapping(value = "enable")
	public String enable(Module module) {
		if(Global.isDemoMode()){
			return renderResult(Global.FALSE, "演示模式，不允许操作！");
		}
		if (!module.getCurrentUser().isSuperAdmin()){
			return renderResult(Global.FALSE, "越权操作，只有超级管理员才能修改此数据！");
		}
		module.setStatus(Module.STATUS_NORMAL);
		moduleService.updateStatus(module);
		return renderResult(Global.TRUE, "启用模块"+module.getModuleName()+"成功");
	}
	
	/**
	 * 验证编码是否有效
	 * @return
	 */
	@ResponseBody
	@RequiresPermissions("sys:module:edit")
	@RequestMapping(value = "checkCode")
	public String checkCode(String oldCode, String moduleCode) {
		Module module = new Module();
		module.setModuleCode(moduleCode);
		if (moduleCode != null && moduleCode.equals(oldCode)) {
			return "true";
		} else if (moduleCode != null && moduleService.get(module) == null) {
			return "true";
		}
		return "false";
	}
	
	/**
	 * 删除数据
	 * @param module
	 * @return
	 */
	@RequiresPermissions("sys:module:edit")
	@ResponseBody
	@RequestMapping(value = "delete")
	public String delete(Module module, RedirectAttributes redirectAttributes) {
		logger.debug("moduleCode:{}",module.getModuleCode());
		moduleService.delete(module);
		return renderResult(Global.TRUE, "删除模块成功！");
	}

}